template <typename T>
struct SNode 
{
  SNode () : _next(0) {}
  SNode (T data) : _data(data), _next(0) {}
  SNode (T data, Node<T>* next) : _data(data), _next(next){}
  SNode (Node<T>* next) : _next(next) {}

  T data;
  Node<T>* next; 
}

template <typename T>
struct Node : public SNode<T>
{
  Node<T>* prev; 
}